|
|
|
Folien zum IFC-Vortrag am 20.12.2000 |
|
|
|
|
JDBC (Java Database Connectivity) |
|
RMI (Remote Method Invocation) |
|
JNDI (Java Naming and Directory Interface) |
|
Java IDL / CORBA (Interface Description Language
/ Common Object Request Broker Architecture) |
|
|
|
|
JMS (Java Message Service) |
|
JTA (Java Transaction API) |
|
Java Servlets / JSP (Java ServerPages) |
|
EJB (Enterprise JavaBeans) |
|
|
|
|
|
Verteiltes Komponenten Modell |
|
JavaBeans als RMI-Remote Objekte |
|
Können die Vorteile des Frameworks nutzen |
|
Transaktionen |
|
Persistenz |
|
Sicherheit |
|
Resourcen-Pools |
|
Andere Java-API‘s |
|
Brauchen eine Laufzeitumgebung (EJB-Container) |
|
|
|
|
|
Dient als Laufzeitumgebung für EJB |
|
Sun liefert nur eine Referenzimplementation |
|
BEA Weblogic Server, EnHydra Open Source Projekt |
|
Hersteller ist verpflichtet alle Zusagen für
EJB‘s einzuhalten |
|
-> Kompatibilitätslogo |
|
Hersteller darf sog. Value-added-features
einbauen |
|
-> Kompatibilitätsprobleme |
|
Einige Details sind nicht standardisiert: z.B.
Laden des Datenbanktreibers |
|
-> Herstellerspezifisch |
|
|
|
|
Persistenz |
|
Business Methoden |
|
Finder Methoden |
|
PrimaryKey |
|
Container Managed Persistence (CMP) |
|
Bean Managed Persistence (BMP) |
|
Überdauern nur eine Benutzersitzung |
|
Applikations Logik |
|
Statefull Session Beans |
|
Stateless Session Beans |
|
|
|
|
Haben über Methodenaufrufe hinweg einen Zustand |
|
Sind für eine Sitzung spezifisch |
|
Z.B. Abwicklung eines Workflows |
|
Z.B. Shopping Cart |
|
Speichern keinen Zustand |
|
Vergleichbar mit statischen Methoden einer
Klasse |
|
Eine Bean kann von verschiedenen Benutzern
gleichzeitig genutzt werden |
|
Z.B. Druckdienste anbieten |
|
|
|
|
|
Factory zum erzeugen von Instanzen |
|
Namenskonvention: |
|
DeinBeanNameHome.java |
|
Extends EJBHome |
|
public EJBMetaData getEJBMetaData() throws
java.rmi.RemoteException; |
|
public void remove(...) throws
java.rmi.RemoteException, RemoveException; |
|
Methoden zum Erzeugen von Beans |
|
public void create(...) throws
java.rmi.RemoteException, evtl. andere Exceptions |
|
|
|
|
|
Interface für die Remote ausführbaren Methoden |
|
Namenskonvention: |
|
DeinBeanName.java |
|
Extends EJBObject |
|
public EJBHome getEJBHome() throws
java.rmi.RemoteException; |
|
public Handle getHandle() throws
java.rmi.RemoteException; |
|
public Object getPrimaryKey() throws
java.rmi.RemoteException; |
|
public boolean isIdentical(EJBObject obj) throws
java.rmi.RemoteException; |
|
public void remove() throws
java.rmi.RemoteException, RemoveException; |
|
Enthält weiter die Business und Bean Methoden |
|
|
|
|
|
Implementation der aus den Interfaces
vorgegebenen Methoden |
|
Implementiert die Home/Remote Interfaces nicht
direkt, sondern ist nur lose verpflichtet die vereinbarten Methoden zu
implementieren |
|
Namenskonvention: |
|
DeinBeanNameBean.java |
|
Implementiert das SessionBean Interface |
|
public void ejbActivate() throws
java.rmi.RemoteException; |
|
public void ejbPassivate() throws
java.rmi.RemoteException; |
|
public void ejbRemove() throws
java.rmi.RemoteException; |
|
public void setSessionContext(SessionContext
ctxt) throws java.rmi.RemoteException; |
|
Enthält zu jeder create(...) eine
korrespondierende ejbCreate(...) Methode |
|
|
|
|
Der EJB-Container übernimmt das Datenbankmapping |
|
Auf einfache Datenrelationen beschränkt |
|
Man braucht kein SQL selbst schreiben, sondern
gibt nur die Datenfeld/Tabellenspalte Relation an |
|
Man hat evtl. Probleme bei der Skalierung der
Applikation |
|
Für die Finder Methoden wird ein
herstellerabhängiges kurzes Skript geschrieben |
|
|
|
|
|
|
|
|
Gleiche Konventionen wie bei Session Beans |
|
Es gibt sog. Finder Methoden: |
|
Mindestens vorhanden: |
|
public DeinBeanName findByPrimaryKey(PKType pk)
throws java.rmi.RemoteException, FinderException; |
|
Liefern entweder DeinBeanName |
|
oder Enumeration/Iterator |
|
Konvention: |
|
public ... findByIrgendwas(...) throws
java.rmi.RemoteException, FinderException; |
|
|
|
|
|
Implements EntityBean |
|
public void ejbLoad() throws
java.rmi.RemoteException; |
|
public void ejbStore() throws
java.rmi.RemoteException; |
|
public void ejbActivate() throws
java.rmi.RemoteException; |
|
public void ejbPassivate() throws
java.rmi.RemoteException; |
|
public void ejbRemove() throws
java.rmi.RemoteException; |
|
public void setSessionContext(SessionContext
ctxt) throws java.rmi.RemoteException; |
|
public void unsetSessionContext() throws
java.rmi.RemoteException; |
|
Die Methoden aus dem EntityBean Interface werden
nur leer implementiert |
|
Man braucht nur die Business Methoden
implementieren |
|
|
|
|
Man muß nun selbst das Finden, Laden, Speichern,
Erzeugen und Zerstören der Beans kodieren |
|
Man kann auch komplexe Datenzusammenhänge
modellieren |
|
Die entsprechenden SQL Befehle sind alle selbst
zu schreiben |
|
Bei der Skalierung auftretende Probleme kann man
nun durch „schlaueren“ Code umgehen |
|
|
|
|
Es wird wieder das EntityBean Interface
implementiert |
|
Die vorgegebenen Methoden werden nicht leer,
sondern mit Inhalt implementiert |
|
Zu den ejbCreate(...) Methoden gibt es
korrespondierende ejbPostCreate(...) Methoden |
|
|
|
|
Um Implementationsfehler zu umgehen kann man das
Remote Interface implementieren. |
|
Damit man die EJBObject Methoden nicht
implementieren muss gibt es folgenden Trick: |
|
|
|
|
Java Enterprise in a Nutshell – David Flanagan |
|
Core Servlets and Java ServerPages – Marty Hall |
|
Designing Enterprise Applications with J2EE –
Nicholas Kassem |
|
Enterprise JavaBeans – Richard Monson-Haefel |
|
|
|